1 LN$="----------" 2 GOTO2000 5 C=MA:IFSX(C)THENU(TR(CO(R,C)))=. 10 IFNTHEN35 15 F=.:C=C-1:IFC=.THENRETURN 20 IFSX(C)THENU(TR(CO(R,C)))=. 25 N=ND(C):IFN=.THEN15 30 FORI=1TON:L(I)=TR(DI(C,I)):NEXT 35 GOSUB258:IFFTHEN15 40 FORI=1TON:TJ=L(I):SJ=SO(DI(C,I)):GOSUB270:IFA1=.THEN35 45 TR(DI(C,I))=TJ:NEXT 50 TJ=CA(C-1):FORI=1TOR-1:IFC>LEN(RW$(I))THEN65 52 IFPEEK(198)<>0THENGOSUB5000:IFAG=1THENRUN 55 IFRP(C)=ITHEN65 60 TJ=TJ+TR(CO(I,C)) 65 NEXT:CA(C)=INT(TJ/10):TJ=TJ-10*CA(C):IFRP(C)THENIFTJTHEN10 70 IFRP(C)THEN105 75 A=CO(R,C):IFATHENIFSX(C)THEN90 80 IFTJ=TR(A)THEN105 85 GOTO10 90 IFU(TJ)THEN10 95 SJ=SO(A):GOSUB270:IFA1=.THEN10 100 TR(A)=TJ:U(TJ)=1 105 C=C+1:IFC>MATHEN120 110 A1=.:N=ND(C):IFN=.THEN50 115 GOSUB252:GOTO40 120 TJ=CA(MA):IFTJ=.THENONLR-MA+1GOTO155,5 125 IFLR=MATHEN5 130 A=CO(R,LR):IFSX(C)=.THEN150 135 IFU(TJ)THEN5 140 SJ=SO(A):GOSUB270:IFA1=.THEN5 145 TR(A)=TJ:U(TJ)=1:GOTO155 150 IFTR(A)-TJTHEN5 155 N=ND(12):IFN=.THEN192 160 GOSUB252:GOTO185 165 IFN=.THEN175 170 GOSUB258:IFF=.THEN185 175 IFSX(LR)THENU(TR(CO(R,LR)))=. 180 C=MA:F=.:GOTO20 185 FORI=1TON:TJ=L(I):SJ=SO(DI(12,I)):GOSUB270:IFA1=.THEN170 190 TR(DI(12,I))=TJ:NEXT 192 FORI=1TOR:IFTR(CO(I,LEN(RW$(I))))=.THEN165 195 IFCL(I)=0THEN230 200 A=0:FORA1=LEN(RW$(I))TO1STEP-1:A=10*A+TR(CO(I,A1)):NEXT 202 IFCL(I)>2THEN215 205 GOSUB350:IFCL(I)+(A1>0)=1THEN230 210 GOTO165 215 IFCL(I)>4THEN230 220 B=INT(SQR(A)*A2):A1=3:IFA=B*BTHENA1=4 225 IFCL(I)=A1THEN165 230 NEXTI:B$=TI$:S=S+1:IFS=1THENGOSUB475:GOTO235:REM SOLUTION 232 PRINT:PRINT"THE NEXT SOLUTION IS READY...":PRINT"PRESS A KEY TO SEE IT." 233 IFP<4THENGOSUB465 235 PRINT"[147]";:GOSUB400:IFPTHENCMDP:GOSUB400:PRINT#P 240 PRINT:PRINT"LET ME GET BACK TO WORK ...":PRINT"" 245 TI$=B$:GOTO165 250 : 251 REM SUBROUTINES 252 I=1 253 L(I)=-1 254 L(I)=L(I)+1:IFU(L(I))THENIFL(I)<9THEN254 255 IFL(I)=9THENIFU(9)THEN259 256 U(L(I))=1:IFI11THEN510 555 PRINT:PRINT"ENTER EACH LINE SEPARATELY:":PRINT 560 FORI=1TOR 565 INPUTRW$(I):IFLEN(RW$(I))>10THEN510 570 IFLEN(RW$(I))=0THEN510 575 NEXT:PRINT 580 CS$(0)=" " 585 LR=LEN(RW$(R)):GOSUB370 590 FORI=1TOR:B=LEN(RW$(I)):IFI=RTHEN610 600 IFB=MATHENA1=A1+1 605 IFB>MATHENA1=0:MA=B 610 FORN=1TOB:A$=LEFT$(RIGHT$(RW$(I),N),1) 615 IFASC(A$)<65THENA=0:IN$(0)=A$:L(0)=1:GOTO635 620 FORA=1TO10:IFIN$(A)=A$THEN635 625 IFIN$(A)=""THENIN$(A)=A$:NM=A:GOTO635 630 NEXT:NM=11 635 CO(I,N)=A 640 NEXTN,I 645 IFMA>LRORLR>MA+1THEN510 650 PRINT"I FOUND"NM"LETTERS:":IFNM<2ORNM>10THEN510 655 FORI=1TONM:PRINT" "IN$(I);:SO(I)=13:TR(I)=10:NEXT:PRINT 660 IFLR=MATHEN675 665 IFA1=1THENSO(A)=12 670 IFA1=0THENTR(A)=1:SO(A)=1:U(1)=1:L(A)=1:NC=1:CS$(1)=IN$(A)+" MUST BE 1" 675 GOSUB1000:REM CLUES 680 FORI=1TOR:A=CO(I,LEN(RW$(I))):IFSO(A)=13THENSO(A)=15 685 IFSO(A)=0THENPRINTCS$(0):PRINTIN$(A)" CAN'T BE ZERO!":GOTO510 690 NEXT 695 GOSUB370 700 PRINT"THIS WILL TAKE A FEW MINUTES--" 702 PRINT"SHOULD I

ROCEED OR ANCEL?" 705 POKE198,0:WAIT198,1:GETA$:IFA$<>"P"ANDA$<>"C"THEN705 715 IFA$="C"THEN520 720 : 725 TI$="000000":PRINT"THINKING...":PRINT"" 730 FORC=1TOMA:I=0:FORN=1TOR-1:IFC>LEN(RW$(N))THEN750 735 A=CO(N,C):IFL(A)ORA=0THEN750 740 IFRP(C)=0THENIFA=CO(R,C)THENRP(C)=N:GOTO750 745 I=I+1:DI(C,I)=A:L(A)=1 750 NEXT:ND(C)=I:IFL(CO(R,C))ORRP(C)THEN760 755 L(CO(R,C))=1:SX(C)=1 760 NEXT:IFLR>MATHENIFL(CO(R,LR))=0THENL(CO(R,LR))=1:SX(LR)=1 765 I=0:FORC=1TOMA:A=CO(R,C):IFL(A)THEN775 770 I=I+1:DI(12,I)=A:L(A)=1 775 NEXT:ND(12)=I:C=1 800 GOSUB110:REM SOLUTION 810 B$=TI$:GOSUB475:PRINT" TOTAL TIME: "B$ 815 IFPTHENCMDP:PRINT" TOTAL TIME: "B$:PRINT#P 820 IFSTHENPRINT"NO MORE SOLUTIONS":GOTO520 825 IFPTHENCMDP:GOSUB375:PRINT" SORRY.. NO SOLUTION FOUND":PRINT#P 830 GOSUB375:PRINT"SORRY.. NO SOLUTION FOUND":GOTO520 890 : 895 REM INSTRUCTIONS 900 PRINT"[147]","ADDITION PUZZLE":PRINT,"+++++++++++++++":PRINT 905 PRINT"THIS PROGRAM SOLVES ALPHAMETIC ADDITION PUZZLES OF THIS TYPE:" 910 PRINT:PRINT" WAS":PRINT" THAT":PRINT" ALL" 912 PRINT" -----":PRINT" RIGHT" 915 PRINT:PRINT"EACH LETTER STANDS FOR A DIFFERENT DIGIT" 920 PRINT"SIMPLY ENTER THE PUZZLE WHEN PROMPTED." 925 PRINT"ALLOW SEVERAL MINUTES FOR THE SOLUTION." 930 PRINT:PRINT"ANY CLUES YOU CAN OFFER WILL SPEED THE" 935 PRINT"PROCESS. IN THIS EXAMPLE, R MUST BE 1;" 940 PRINT"IT IS GIVEN THAT 'WAS' MUST BE SQUARE." 950 PRINT"USING A PRINTER? Y/N" 955 GOSUB465:PRINT"[147]" 960 IFA$<>"Y"THENPOKE828,0:RETURN 965 PRINT:PRINT"ENTER THE DATE (NO COMMAS)":INPUTA$ 967 OPEN15,4,15:CLOSE15:IFST<>0THEN60000 970 POKE828,4:OPEN4,4 975 PRINT#4,CHR$(14)"**ADDITION MASTER** "A$ 980 RETURN 990 : 995 REM GET CLUES 1000 PRINT:PRINT"CAN YOU OFFER ANY CLUES? Y/N" 1010 CS$(21)="PRIME":CS$(22)="NOT PRIME":CS$(23)="SQUARE" 1020 CS$(24)="NOT SQUARE":CS$(26)="EVEN":CS$(27)="ODD":CS$(28)="1 OR 2" 1030 GOSUB465:IFA$="N"THENRETURN 1040 GOSUB370:PRINT:PRINT"PRESS THE LETTER THE CLUE IS FOR." 1050 PRINT"TO SPECIFY A LINE, PRESS THE SPACE BAR:" 1060 GOSUB470:IFA$=" "THEN1350 1070 FORI=1TONM:IFIN$(I)=A$THEN1100 1080 NEXT 1090 PRINTA$"???":GOTO1330 1100 PRINT:PRINT"PRESS THE VALUE OF THE LETTER '"A$"', OR..." 1110 PRINT"A IF EVEN":PRINT"B IF ODD":PRINT"C IF IT COULD BE 1 OR 2" 1120 WAIT198,3:GETB$:TJ=ASC(B$)-48+7*(B$>"9") 1130 IFTJ<0ORTJ>12THEN1090 1140 SJ=SO(I):IFTJ<10THEN1230 1150 IFSJ<10THENPRINTA$" IS"SJ:GOTO1330 1160 ONSJ-9GOTO1170,1180,1190,1310,1200,1310,1210 1170 ONTJ-9GOTO1090,510,1580 1180 ONTJ-9GOTO510,1090,1570 1190 ONTJ-9GOTO1590,1570,1090 1200 ONTJ-9GOTO510,1310,1570 1210 ONTJ-9GOTO1310,1310,1570 1230 IFSJ=TJTHEN1090 1240 IFSJ<10THEN510 1250 GOSUB270:IFA1=0THEN510 1260 NC=NC+1:CS$(NC)=IN$(I)+" MUST BE"+STR$(TJ) 1270 U(TJ)=1:L(I)=1:TR(I)=TJ:SO(I)=TJ 1280 FORN=1TONM:IFI=NTHEN1300 1290 IFTJ=SO(N)THENPRINT:PRINTIN$(I)" & "IN$(N)" CAN'T BOTH BE"TJ:GOTO510 1300 NEXT:GOTO1320 1310 SO(I)=TJ:NC=NC+1:CS$(NC)=IN$(I)+" MUST BE "+CS$(TJ+16) 1320 PRINT:PRINTCS$(NC) 1330 PRINT"ANY MORE CLUES? Y/N":GOTO1030 1340 : 1350 PRINT:INPUT"LINE NUMBER";A:IFA<1ORA>RTHEN1090 1360 PRINT:PRINTRW$(A)" - IS IT:" 1370 PRINT:PRINT"1 PRIME?":PRINT"2 NOT PRIME?" 1380 PRINT"3 SQUARE?":PRINT"4 NOT SQUARE?" 1390 PRINT"5 ODD?":PRINT"6 EVEN?" 1400 PRINT"PRESS A NUMBER." 1410 GOSUB465:B=VAL(A$):IFB=0ORB>6THEN1090 1420 I=CO(A,1):NC=NC+1:IFB<5THEN1440 1430 CS$(NC)=RW$(A)+" IS "+CS$(32-B):TJ=16-B:A$=IN$(I):GOTO1140 1440 CL(A)=B:CS$(NC)=RW$(A)+" IS "+CS$(B+20) 1450 IFLEN(RW$(A))<=8THEN1460 1455 CL(A)=0:PRINT"I CAN'T ENSURE THAT":CS$(NC)=CS$(NC)+"??" 1460 IFLEN(RW$(A))=1THEN1320 1470 ONBGOTO1490,1320,1530,1320 1480 : 1490 SO=SO(I)+1 1495 ONSOGOTO505,1320,510,1320,510,510,510,1320,510,1320,510,1510,1570 1500 IFSO(I)=16THEN510 1510 SO(I)=14:GOTO1320 1520 : 1530 ONSO(I)+1GOTO1320,1320,510,510,1320,1320,1320,510,510,1320,1320 1540 ONSO(I)-10GOTO1320,1570,1550,510 1550 SO(I)=16:GOTO1320 1560 : 1570 A=1:GOTO1590 1580 A=2 1590 SO(I)=A:TR(I)=A:U(A)=1:L(I)=1:NC=NC+1 1600 CS$(NC)=IN$(I)+" MUST BE"+STR$(A):GOTO1280 1990 : 1995 REM TITLE SCREEN 2000 POKE54273,50:POKE54278,243:POKE54276,33 2010 POKE53269,0:POKE53281,0:PRINTCHR$(142) 2020 PRINT"[147][150] * * * ADDITION MASTER * * * [154]" 2030 PRINTTAB(14)"[150]BY IAN ADAM" 2040 PRINTTAB(13)"[154]WOULD YOU LIKE:" 2050 PRINTTAB(13)"[159]1[154]. ADDITION PUZZLE" 2060 PRINTTAB(13)"[159]2[154]. PRIME NUMBERS" 2070 PRINTTAB(13)"[159]3[154]. SQUARES" 2080 PRINTTAB(13)"[159]0[154]. END" 2090 GOSUB465 2095 IFA$<"0"ORA$>"3"THEN2090 2100 ONVAL(A$)+1GOTO6000,500,2500,3000 2490 : 2500 PRINT"[147]PRIME NUMBERS" 2510 PRINT:PRINT"1. TEST A NUMBER":PRINT"2. LIST PRIMES" 2520 PRINT"3. LIST NON-PRIMES":PRINT"4. BACK TO MENU" 2530 GOSUB470:B=VAL(A$):IFB<1ORB>3THENRUN 2560 PRINT"[147]ENTER 0 TO STOP" 2570 PRINT:PRINT"WHAT NUMBER TO START?" 2580 C=0:INPUTC:GOSUB475:C=INT(C):IFC<1THEN2500 2590 IFABS(C)>4E5THENPRINT"...THINKING" 2600 IFABS(C)>4E9THENPRINT"THAT'S TOO BIG!":PRINT:GOTO2510 2610 IFB>1THEN2670 2620 A=ABS(C):GOSUB350 2630 IFA1=0THENPRINTC"IS PRIME":GOTO2660 2640 PRINTC"IS NOT PRIME, BEING" 2650 PRINT"DIVISIBLE BY"A1"AND"C/A1 2660 PRINT:PRINT"NEXT";:GOTO2580 2670 FORD=1TO22:A=ABS(C):GOSUB350:C=C+1 2680 IF(A1>0)=B-3THEND=D-1:NEXT 2690 PRINTC-1:NEXT:PRINT"MORE?" 2700 GOSUB465:IFA$="N"THEN2500 2710 GOTO2590 2990 : 3000 PRINT"[147]SQUARE NUMBERS" 3010 PRINT:PRINT"1. TEST A NUMBER":PRINT"2. LIST SQUARES" 3020 PRINT"3. BACK TO MENU":K3=1+2E-7:GOSUB470:D=VAL(A$) 3030 IFD=0ORD>2THENRUN 3040 PRINT:PRINT"WHAT NUMBER TO START?" 3050 PRINT"ENTER 0 TO QUIT" 3060 A=0:INPUTA:GOSUB475:A=ABS(INT(A)):IFA=0THEN3000 3070 IFA>4E9THEN3180 3080 IFD=2THENB=INT(SQR(A-1))+1:GOTO3140 3090 B=SQR(A):C=INT(B*K3) 3100 PRINT:PRINTA"IS "; 3110 IFA=C*CTHENB=C:PRINT"THE SQUARE OF"B:GOTO3130 3120 PRINT"NOT SQUARE":PRINT"ROOT:"B 3130 PRINT"NEXT: ";:GOTO3050 3140 PRINT"[147] SQUARE"TAB(20)"ROOT" 3150 FORB=BTOB+21:PRINT(B*B)TAB(20)B:NEXT 3160 PRINT"MORE?";:GOSUB465:IFA$="N"THEN3000 3170 IFB*B<4E9THEN3140 3180 PRINT:PRINT"TOO BIG!":GOTO3010 5000 REM QUIT PROCESSING 5010 PRINT" *** DO YOU WANT TO QUIT? ***" 5020 POKE198,0:WAIT198,1:GETA$:IFA$<>"Y"ANDA$<>"N"THEN5020 5030 AG=0:IFA$="Y"THENAG=1:GOTO5040 5035 PRINT"I SHALL CONTINUE WITH MY WORK..." 5040 RETURN 6000 OPEN15,8,15,"R0:HELLO CONNECT=HELLO CONNECT":INPUT#15,ER:CLOSE15 6010 PRINT"[147]";:IFER<>63THENEND 6020 LOAD"HELLO CONNECT",8 60000 REM NO PRINTER 60010 PRINT"[147]"SPC(10)"PRINTER NOT ON-LINE..." 60020 FORDL=1TO3000:NEXT:GOTO2000